#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QTimer>
#include <QJsonDocument>
#include <QJsonObject>
#include <QLabel>
#include <QProgressBar>
#include <QPushButton>
#include <QComboBox>
#include <QGridLayout>
#include <QGroupBox>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QDebug>
#include <QTextEdit>
#include <QFont>
#include <QJsonObject>
#include <QJsonDocument>
#include <QJsonParseError>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    // 串口相关槽函数
    void onConnectButtonClicked();
    void onDisconnectButtonClicked();
    void readSerialData();
    void updateSerialPortList();
    void updateConnectionStatus(bool connected);

    // 数据处理槽函数
    void processSensorData(const QJsonObject &data);

private:
    // 调试相关
    QTextEdit *debugTextEdit;         // 调试信息显示框

    // UI元素
    QLabel *temperatureLabel;         // 温度数值显示
    QProgressBar *temperatureBar;     // 温度进度条
    QLabel *humidityLabel;            // 湿度数值显示
    QProgressBar *humidityBar;        // 湿度进度条
    QLabel *lightLabel;               // 光照强度显示
    QProgressBar *lightBar;           // 光照强度进度条
    QLabel *soilMoistureLabel;        // 土壤湿度显示
    QProgressBar *soilMoistureBar;    // 土壤湿度进度条

    QComboBox *portComboBox;          // 串口选择下拉框
    QPushButton *connectButton;       // 连接按钮
    QPushButton *disconnectButton;    // 断开连接按钮

    // 串口通信
    QSerialPort *serial;              // 串口对象
    QTimer *portScanTimer;            // 串口扫描定时器

    // 布局相关
    void setupUI();
    void setupConnections();
    void updateProgressBar(QProgressBar *bar, float value, float min, float max);
};
#endif // MAINWINDOW_H
